/**
 * 
 */
package com.huxi.lang.type;

import java.sql.JDBCType;
import java.util.Objects;

/**
 * 应用数据类型
 * 
 * @author jian.wu
 * @since 1.0
 * @version 1.0
 */
public interface CustomType {

	/**
	 * 获取数据类型
	 * 
	 * @return 数据类型，非空。
	 * @since 1.0
	 */
	VType<?> getVType();

	/**
	 * 获取等效的JDBC类型
	 * 
	 * @return JDBC类型
	 * @since 1.0
	 */
	default JDBCType getJdbcType() {
		return getVType().getJdbcType();
	}

	/**
	 * 格式化为文本内容
	 * 
	 * @param value 被格式化值
	 * @return 格式化后文本
	 * @since 1.0
	 */
	default String format(Object value) {
		return Objects.toString(value);
	}

	/**
	 * 格式化为文本内容
	 * 
	 * @param value     被格式化值
	 * @param nullValue 空值返回文本
	 * @return 格式化后文本
	 * @since 1.0
	 */
	default String format(Object value, String nullValue) {
		return Objects.toString(value, nullValue);
	}

	/**
	 * 解析文本内容
	 * 
	 * @param text 文本内容
	 * @return 解析后数据
	 * @since 1.0
	 */
	default Object parse(String text) {
		return getVType().parse(text);
	}

	/**
	 * 解析文本内容
	 * 
	 * @param text      文本内容
	 * @param nullValue 空值文本
	 * @return 解析后数据
	 * @since 1.0
	 */
	default Object parse(String text, String nullValue) {
		return getVType().parse(text, nullValue);
	}

	/**
	 * 转换数据
	 * 
	 * @param value 被转换数据
	 * @return 转换后数据
	 * @since 1.0
	 */
	default Object cast(Object value) {
		return getVType().cast(value);
	}

}
